Si tenemos la siguiente declaración de variables
double x = 3.0, y, z = 1.5;
y luego hacemos
y = x + 1.05 + z;
parece intuitivo que se van a sumar los 3 valores (el que sale de x, el 1.05 y el que sale de z), o sea que y cambiará al valor 5.55.
De todas maneras, hay que decir que cuando se evaluan expresiones en C++, se opera con pares de valores, no con 3 a la vez. De hecho se dice que la suma, la resta, la multiplicación y la división son operadores binarios porque tienen dos operandos, a los dos lados de la operación. Pero la expresión x + 1.05 + z parece tener 3 operandos.
Lo que hace el compilador de C++ en estos casos es comenzar por la izquierda. Es decir, suma por pares empezando por el par que está más a la izquierda. Por tanto, se suma primero x con 1.05 y el resultado se suma com z. Ambas operaciones son binarias, involucran a dos operandos.
Cuando mezclamos operadores, como en la instrucción
y = x - 1.05 + z * 2.0;
hay que decidir en qué orden vamos a hacer las operaciones. Al venir de las matemáticas, uno sabe que las multiplicaciones se hacen antes que las sumas, por tanto, si ponemos paréntesis a la expresión de arriba, quedaría así:
y = x - 1.05 + (z * 2.0);
Es decir, primero se debe hacer la multiplicación de z por 2.0 y luego se puede sumar el valor resultante al resto.
La idea de que hay operadores, como la multiplicación, que tienen prioridad sobre otros, como la suma, es algo que hay que saber para poder escribir expresiones correctas. En C++, por suerte, las expresiones numéricas se comportan igual que en matemáticas.
Al igual que en matemáticas, al poner paréntesis, estamos "obligando" a calcular el interior de los paréntesis antes de proseguir con el exterior. Si la expresión anterior la escribimos así
y = x - (1.05 + z) * 2.0;
la cosa cambia mucho. Ahora tenemos una resta donde el primer operando es x y luego viene un término que es la multiplicación de (1.05 + z) por 2.0.
En general, es importante poner paréntesis cuando no estemos seguros de cuál es el orden por defecto y queramos cercionarnos de que la expresión se evalúa como entendemos. Si añadimos todos los paréntesis posibles a las expresiones vistas hasta ahora tendríamos
y = ((x + 1.05) + z); y = ((x - 1.05) + (z * 2.0)); y = (x - ((1.05 + z) * 2.0));
En preparación